package com.gonsin.easycount.service;


import com.gonsin.easycount.model.UserInfoOption;

import java.util.List;
import java.util.Set;

/**
 *
 */
public interface ICountService {


    /**
     * 初始化数据
     */
    void init(String topic, List<UserInfoOption> allOptions, Object holder);

    /**
     * 进行加一操作
     */
    void increase(String topic, String userInfo, String[] option, Object extraData);

    /**
     * 返回总票数
     */
    long sum(String topic);

    /**
     * 返回该选票总数
     */
    long sumOptions(String topic, String option);

    /**
     * 返回某个人员自己投票的数
     */
    long sumUserInfos(String topic, String userInfo);

    /**
     * 获取人员选项
     */
    String[] options(String topic, String userInfo);

    /**
     * 获取选项对应的人员
     */
    Set<String> userInfos(String topic, String option);

    /**
     * 获取并清空新增人员
     */
    List<UserInfoOption> getAndRefreshNewUserInfo(String topic);

    /**
     * 尝试触发回调
     */
    void testFlush();


    /**
     * 立即触发该回调
     */
    void flush(String topic);

    /**
     * 是否已初始化
     */
    boolean isInit(String topic);


    /**
     * 释放计数资源
     */
    void release(String topic);

    /**
     * 获取holder
     */
    <T> T getHolder(String topic);

    /**
     * 返回所有选项详情
     */
    Set<UserInfoOption> userInfoOptions(String topic);
}
